package com.nbers.springcloud.microservice.feign;
import com.nbers.springcloud.microservice.entity.Item;
import com.nbers.springcloud.microservice.entity.base.JsonResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Feign是Netfix开发的声明式、模块化的HTTP客户端，可帮助我们更加便捷、优雅地调用HTTP API
 * 如果需要服务间调用，需要使用Feign以及Fallback
 *
 * 申明这是一个Feign客户端，并且指明服务id
 * 实际开发中ItemFeignClient一般直接继承(extends)服务提供方的接口以避免代码重复（例如Item工程会以jar包的形式提供ItemService接口）
 * @author SIMON
 */
@FeignClient(value = "app-provider", fallback = ServiceFallback.class)
public interface MyFeignClient {
    /**
     * 这里定义了类似于SpringMVC用法的方法，就可以进行RESTful方式的调用了
     *
     * @param id
     * @return
     */
    @RequestMapping(value = "/item/{id}", method = RequestMethod.GET)
    JsonResult<Item> query(@PathVariable("id") Long id);
}
